package com.zeratul.common.trace;

import cn.hutool.core.util.ObjectUtil;
import com.zeratul.common.core.constant.MdcConstants;
import org.slf4j.MDC;

/**
 * 全局追踪号生成器
 */
public interface TraceIdManager {

    /**
     * 生成全局追踪号
     */
    String generateTraceId();

    /**
     * 获得全局追踪号
     */
    default String getTraceId() {
        String traceId = MDC.get(MdcConstants.TRACE_ID);
        if (ObjectUtil.isNotEmpty(traceId)) {
            return traceId;
        }
        return generateTraceId();
    }

    /**
     * 设置全局追踪号
     */
    default void setTraceId(String traceId) {
        MDC.put(MdcConstants.TRACE_ID, traceId);
    }

}
